//
// Created by 梦小星 on 2021/10/24.
// @author 梦小星 https://mengxiaoxing.top
// @mail mengxingcn@aliyun.com
//
#include "SqList.h"
//题目三：删除所有值为x的元素
//方法1：虚拟构造一个新的数组 利用数组的随机访问 根据不等于X的元素 在原来数组的基础上构造新的数组
void deleteX_1(SqList &list, int value) {
    if (list.length == 0) {
        return;
    }
    int k = 0;//用于记录不等于x的元素个数 同时也是删除x后线性表的下标
    for (int i = 0; i < list.length; ++i) {
        if (list.data[i] != value) {
            list.data[k] = list.data[i];//将数据赋予 第k个位置的元素
            k++;//伪新数组的下标+1
        }
    }
    list.length = k;
}

//法二：有几个等于X的元素 当前元素就向前移动几个
void deleteX_2(SqList &list, int value) {
    if (list.length == 0) {
        return;
    };
    int k = 0;
    int i = 0;
    while (i < list.length) {
        if (list.data[i] == value) {
            k++;//等于value元素的个数
        } else {
            list.data[i - k] = list.data[i];//当前元素迁移k个元素
        }
        i++;
    }
    list.length = list.length - k;
}
/*
 * 方法三
 * */
void deleteX_3(SqList &list, int value) {
    if (list.length == 0) {
        return;
    }
    for (int i = 0; i < list.length; ++i) {
        if(list.data[i]==value){
            list.data[i]=list.data[list.length-1];
            list.length--;
            i--;
        }
    }
}